home *** CD-ROM | disk | FTP | other *** search
/ 100 Plus Great Games 2 / 100PLUSV2.BIN / games / EntertheTroy.dxr / 00009_Monster handlers.ls < prev    next >
Encoding:
Text File  |  2002-01-31  |  11.5 KB  |  271 lines

  1. global monsterSO, monsterData, playerViewpoint
  2.  
  3. on initializeMonsters
  4.   monsterData = []
  5.   repeat with wMonster = 1 to 25
  6.     wSprite = monsterSO + wMonster
  7.     puppetSprite(wSprite, 1)
  8.     sprite(wSprite).visible = 0
  9.     set the member of sprite wSprite to "Teeth 1"
  10.     set the ink of sprite wSprite to 36
  11.     add(monsterData, [0, 0, point(0, 0), []])
  12.   end repeat
  13. end
  14.  
  15. on addMonster spawnType, spawnLoc, spawnParameters
  16.   validSlot = 0
  17.   repeat with wSlot = 1 to count(monsterData)
  18.     if (monsterData[wSlot][1] = 0) and (validSlot = 0) then
  19.       validSlot = wSlot
  20.     end if
  21.   end repeat
  22.   if validSlot <> 0 then
  23.     wSprite = monsterSO + validSlot
  24.     monsterData[validSlot] = [1, spawnType, spawnLoc, spawnParameters, 0]
  25.     sprite(wSprite).visible = 1
  26.     sprite(wSprite).rotation = 0
  27.   end if
  28. end
  29.  
  30. on moveMonsters
  31.   global monsterHitArea, monsterHarmArea
  32.   monsterHitArea = []
  33.   monsterHarmArea = []
  34.   repeat with wMonster = 1 to count(monsterData)
  35.     wSprite = monsterSO + wMonster
  36.     if monsterData[wMonster][1] = 1 then
  37.       case monsterData[wMonster][2] of
  38.         1:
  39.           curLoc = monsterData[wMonster][3]
  40.           moveSpeed = monsterData[wMonster][4][1]
  41.           if moveSpeed[1] > 0 then
  42.             solidTest = checkSolidpoint(curLoc + point(15, 0))
  43.             if solidTest[1] = 1 then
  44.               monsterData[wMonster][4][1][1] = 0 - abs(moveSpeed[1])
  45.             end if
  46.             monsterFlip = 1
  47.           else
  48.             if moveSpeed[1] < 0 then
  49.               solidTest = checkSolidpoint(curLoc - point(15, 0))
  50.               if solidTest[1] = 1 then
  51.                 monsterData[wMonster][4][1][1] = abs(moveSpeed[1])
  52.               end if
  53.               monsterFlip = 0
  54.             end if
  55.           end if
  56.           moveSpeed[2] = 0
  57.           driftSpd = monsterData[wMonster][4][2]
  58.           driftMoment = monsterData[wMonster][4][3]
  59.           repeat with wvect = 1 to 2
  60.             if driftSpd[wvect] > 0 then
  61.               driftMoment[wvect] = driftMoment[wvect] - 1
  62.               next repeat
  63.             end if
  64.             driftMoment[wvect] = driftMoment[wvect] + 1
  65.           end repeat
  66.           driftSpd = driftSpd + driftMoment
  67.           monsterData[wMonster][4][2] = driftSpd
  68.           monsterData[wMonster][4][3] = driftMoment
  69.           monsterData[wMonster][3] = monsterData[wMonster][3] + moveSpeed
  70.           if monsterData[wMonster][5] >= 1 then
  71.             addScore(30)
  72.             playSound("jump on enemy SFX", 3)
  73.             set the loc of sprite (monsterSO + wMonster) to point(-50, -50)
  74.             rpoint = monsterData[wMonster][3]
  75.             addparticle(rpoint, 0, 1)
  76.             monsterData[wMonster][1] = 0
  77.             repeat with wCoin = 1 to 1
  78.               addPickup(1, 1, monsterData[wMonster][3], point([-3, 0, 3][wCoin], 5 - random(3)))
  79.             end repeat
  80.           else
  81.             monsterData[wMonster][4][4] = monsterData[wMonster][4][4] + 1
  82.             if monsterData[wMonster][4][4] > 2 then
  83.               monsterData[wMonster][4][4] = 1
  84.             end if
  85.             set the member of sprite wSprite to "teeth" & " " & string(monsterData[wMonster][4][4])
  86.             set the loc of sprite wSprite to monsterData[wMonster][3] - playerViewpoint
  87.             sprite(wSprite).flipH = monsterFlip
  88.             curLoc = monsterData[wMonster][3]
  89.             add(monsterHitArea, rect(curLoc[1] - 25, curLoc[2] - 25, curLoc[1] + 25, curLoc[2] + 25))
  90.             add(monsterHarmArea, rect(curLoc[1] - 15, curLoc[2] - 15, curLoc[1] + 15, curLoc[2] + 25))
  91.           end if
  92.         2:
  93.           monsterData[wMonster][4][1] = monsterData[wMonster][4][1] + monsterData[wMonster][4][2]
  94.           curLoc = monsterData[wMonster][3]
  95.           solidTest = checkSolidpoint(curLoc)
  96.           locY = integer(cos(monsterData[wMonster][4][1] * PI / 180) * -70)
  97.           locX = integer(sin(monsterData[wMonster][4][1] * PI / 180) * 70)
  98.           boomloc = monsterData[wMonster][3] + point(locX, locY)
  99.           if solidTest[1] = 0 then
  100.             addScore(60)
  101.             playSound("jump on enemy SFX", 3)
  102.             monsterData[wMonster][1] = 0
  103.             set the loc of sprite wSprite to point(-50, -50)
  104.             set the member of sprite wSprite to "Void Block"
  105.             sprite(wSprite).rotation = 0
  106.             addparticle(boomloc, 0, 1)
  107.             repeat with wCoin = 1 to 1
  108.               addPickup(1, 1, monsterData[wMonster][3], point([-3, 0, 3][wCoin], 5 - random(3)))
  109.             end repeat
  110.           else
  111.             set the loc of sprite wSprite to monsterData[wMonster][3] - playerViewpoint
  112.             set the member of sprite wSprite to "Spinning eye"
  113.             sprite(wSprite).rotation = monsterData[wMonster][4][1]
  114.           end if
  115.           curLoc = boomloc
  116.           add(monsterHitArea, rect(0, 0, 0, 0))
  117.           add(monsterHarmArea, rect(curLoc[1] - 10, curLoc[2] - 10, curLoc[1] + 10, curLoc[2] + 10))
  118.         3:
  119.           curLoc = monsterData[wMonster][3]
  120.           moveSpeed = monsterData[wMonster][4][1]
  121.           if moveSpeed[1] > 0 then
  122.             solidTest = checkSolidpoint(curLoc + point(15, 0))
  123.             if solidTest[1] = 1 then
  124.               monsterData[wMonster][4][1][1] = 0 - abs(moveSpeed[1])
  125.             end if
  126.             monsterFlip = 1
  127.           else
  128.             if moveSpeed[1] < 0 then
  129.               solidTest = checkSolidpoint(curLoc - point(15, 0))
  130.               if solidTest[1] = 1 then
  131.                 monsterData[wMonster][4][1][1] = abs(moveSpeed[1])
  132.               end if
  133.               monsterFlip = 0
  134.             end if
  135.           end if
  136.           if moveSpeed[2] > 0 then
  137.             solidTest = checkSolidpoint(curLoc + point(0, 15))
  138.             if solidTest[1] = 1 then
  139.               monsterData[wMonster][4][1][2] = 0 - abs(moveSpeed[2])
  140.             end if
  141.           else
  142.             if moveSpeed[2] < 0 then
  143.               solidTest = checkSolidpoint(curLoc - point(0, 15))
  144.               if solidTest[1] = 1 then
  145.                 monsterData[wMonster][4][1][2] = abs(moveSpeed[2])
  146.               end if
  147.             end if
  148.           end if
  149.           monsterData[wMonster][3] = monsterData[wMonster][3] + moveSpeed
  150.           if monsterData[wMonster][5] >= 1 then
  151.             addScore(45)
  152.             playSound("jump on enemy SFX", 3)
  153.             set the loc of sprite (monsterSO + wMonster) to point(-50, -50)
  154.             rpoint = monsterData[wMonster][3]
  155.             addparticle(rpoint, 0, 1)
  156.             monsterData[wMonster][1] = 0
  157.             repeat with wCoin = 1 to 1
  158.               addPickup(1, 1, monsterData[wMonster][3], point([-3, 0, 3][wCoin], 5 - random(3)))
  159.             end repeat
  160.           else
  161.             monsterData[wMonster][4][4] = monsterData[wMonster][4][4] + 1
  162.             if monsterData[wMonster][4][4] > 2 then
  163.               monsterData[wMonster][4][4] = 1
  164.             end if
  165.             set the member of sprite wSprite to "Rolling Eye"
  166.             sprite(wSprite).rotation = monsterData[wMonster][3][1] mod 360
  167.             set the loc of sprite wSprite to monsterData[wMonster][3] - playerViewpoint
  168.             curLoc = monsterData[wMonster][3]
  169.             add(monsterHitArea, rect(curLoc[1] - 25, curLoc[2] - 25, curLoc[1] + 25, curLoc[2] + 25))
  170.             add(monsterHarmArea, rect(curLoc[1] - 15, curLoc[2] - 15, curLoc[1] + 15, curLoc[2] + 15))
  171.           end if
  172.         4:
  173.           curLoc = monsterData[wMonster][3]
  174.           moveSpeed = monsterData[wMonster][4][1]
  175.           floorTest = checkSolidpoint(curLoc + point(0, 20))
  176.           if floorTest[1] = 0 then
  177.             monsterData[wMonster][4][1] = point(0, abs(moveSpeed[2]))
  178.           else
  179.             if moveSpeed[1] > 0 then
  180.               solidTest = checkSolidpoint(curLoc + point(20, 20))
  181.               walltest = checkSolidpoint(curLoc + point(20, 0))
  182.               if (solidTest[1] = 0) or (walltest[1] = 1) then
  183.                 monsterData[wMonster][4][1][1] = 0 - abs(moveSpeed[1])
  184.               end if
  185.               monsterFlip = 1
  186.             else
  187.               if moveSpeed[1] < 0 then
  188.                 solidTest = checkSolidpoint(curLoc + point(-20, 20))
  189.                 walltest = checkSolidpoint(curLoc + point(-20, 0))
  190.                 if (solidTest[1] = 0) or (walltest[1] = 1) then
  191.                   monsterData[wMonster][4][1][1] = abs(moveSpeed[1])
  192.                 end if
  193.                 monsterFlip = 0
  194.               else
  195.                 monsterData[wMonster][4][1][1] = abs(4)
  196.                 monsterFlip = 0
  197.               end if
  198.             end if
  199.             moveSpeed[2] = 0
  200.           end if
  201.           driftSpd = monsterData[wMonster][4][2]
  202.           driftMoment = monsterData[wMonster][4][3]
  203.           repeat with wvect = 1 to 2
  204.             if driftSpd[wvect] > 0 then
  205.               driftMoment[wvect] = driftMoment[wvect] - 1
  206.               next repeat
  207.             end if
  208.             driftMoment[wvect] = driftMoment[wvect] + 1
  209.           end repeat
  210.           driftSpd = driftSpd + driftMoment
  211.           monsterData[wMonster][4][2] = driftSpd
  212.           monsterData[wMonster][4][3] = driftMoment
  213.           monsterData[wMonster][3] = monsterData[wMonster][3] + moveSpeed
  214.           if monsterData[wMonster][5] >= 1 then
  215.             addScore(25)
  216.             playSound("jump on enemy SFX", 3)
  217.             set the loc of sprite (monsterSO + wMonster) to point(-50, -50)
  218.             rpoint = monsterData[wMonster][3]
  219.             addparticle(rpoint, 0, 1)
  220.             monsterData[wMonster][1] = 0
  221.             repeat with wCoin = 1 to 1
  222.               addPickup(1, 1, monsterData[wMonster][3], point([-3, 0, 3][wCoin], 5 - random(3)))
  223.             end repeat
  224.           else
  225.             monsterData[wMonster][4][4] = monsterData[wMonster][4][4] + 1
  226.             if monsterData[wMonster][4][4] > 9 then
  227.               monsterData[wMonster][4][4] = 1
  228.             end if
  229.             if monsterData[wMonster][4][4] > 6 then
  230.               set the member of sprite wSprite to "NewTiny" & "1"
  231.             else
  232.               if monsterData[wMonster][4][4] > 3 then
  233.                 set the member of sprite wSprite to "NewTiny" & "2"
  234.               else
  235.                 set the member of sprite wSprite to "newTiny" & "3"
  236.               end if
  237.             end if
  238.             set the loc of sprite wSprite to monsterData[wMonster][3] - playerViewpoint + point(0, -5)
  239.             sprite(wSprite).flipH = monsterFlip
  240.             curLoc = monsterData[wMonster][3]
  241.             add(monsterHitArea, rect(curLoc[1] - 25, curLoc[2] - 25, curLoc[1] + 25, curLoc[2] + 25))
  242.             add(monsterHarmArea, rect(curLoc[1] - 15, curLoc[2] - 15, curLoc[1] + 15, curLoc[2] + 15))
  243.           end if
  244.         5:
  245.           curLoc = monsterData[wMonster][3]
  246.           driftSpd = monsterData[wMonster][4][2]
  247.           driftMoment = monsterData[wMonster][4][3]
  248.           repeat with wvect = 1 to 2
  249.             if driftSpd[wvect] > 0 then
  250.               driftMoment[wvect] = driftMoment[wvect] - 1
  251.               next repeat
  252.             end if
  253.             driftMoment[wvect] = driftMoment[wvect] + 1
  254.           end repeat
  255.           driftSpd = driftSpd + driftMoment
  256.           monsterData[wMonster][4][2] = driftSpd
  257.           monsterData[wMonster][4][3] = driftMoment
  258.           set the member of sprite wSprite to "Trampoline"
  259.           set the loc of sprite wSprite to monsterData[wMonster][3] + driftSpd - playerViewpoint
  260.           sprite(wSprite).flipH = monsterFlip
  261.           curLoc = monsterData[wMonster][3] + driftSpd
  262.           add(monsterHitArea, rect(curLoc[1] - 25, curLoc[2] - 25, curLoc[1] + 25, curLoc[2] + 25))
  263.           add(monsterHarmArea, rect(curLoc[1] - 15, curLoc[2] - 15, curLoc[1] + 15, curLoc[2] + 15))
  264.       end case
  265.       next repeat
  266.     end if
  267.     add(monsterHitArea, rect(0, 0, 0, 0))
  268.     add(monsterHarmArea, rect(0, 0, 0, 0))
  269.   end repeat
  270. end
  271.